#ifndef GRAPH_H
#define GRAPH_H

#include "Node.h"
#include "Relation.h"

#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/properties.hpp>
#include <vector>
#include <boost/algorithm/string.hpp>

namespace SemanticModel
{
	typedef boost::property<boost::vertex_bundle_t, Node> VertexBundle;
	typedef boost::property<boost::vertex_name_t, std::wstring, VertexBundle> VertexProperty;
	typedef boost::property<boost::edge_bundle_t, Relation> EdgeProperty;
	typedef boost::adjacency_list<boost::vecS,
		boost::vecS,
		boost::undirectedS,
		VertexProperty,
		EdgeProperty> Graph;
				
	typedef std::map<std::wstring, boost::graph_traits<Graph>::vertex_descriptor> NameMap;
	typedef std::map<boost::graph_traits<Graph>::vertex_descriptor, std::wstring> VertexMap;
}

#endif // GRAPH_H